<?php
require "constants.php";

/*sqlDataToHtmlTable hace echo de una consulta MySql en un formato tabla de html.
@param $DATA es del tipo mysqli_result;
 */
function sqlDataToHtmlTable($DATA){
    /*TODO hay que filtrar caracteres no validos solo por seguridad.
    */
    $RESULT = "Se han encontrado ".$DATA->num_rows." resultados.<br>";
    $RESULT .= "<div align='center'> <table border=1 >";

    /*Agrega los nombres de las columna*/
    $RESULT .= sqlColumNames($DATA);


    /*Agrega el contenido de las tablas*/
    while($ROWS = sqlFetchArray($DATA, "ASSOC")){
        $RESULT .=  "<tr>";
        foreach($ROWS as $ITEM){
            $RESULT .=  "<td BGCOLOR=\"#DCC000\" style=\"min-width:20px\">".$ITEM." </td>";
        }
        $RESULT .= "</tr>";
    }
    $RESULT .= "</table></div>";
    return $RESULT;
}

/**Muestra la consulta de forma bonita
 * @param $QUERY mysqli_result una consulta en forma de cadena de caracteres.
 */
function sqlQueryPrettyParser($QUERY){
//    $WORDS = array();
    $WORDS = explode(" ", $QUERY);
    $RETURN = "<p>La consulta fue: <br><br>";
    foreach($WORDS as $ITEM){
        switch ($ITEM){
            case "INTO":
            case "VALUE":
            case "value":
            case "DISTINCT":
            case "distinct":
            case "SELECT":
            case "select":
            case "AS":
            case "as":
            case "ON":
            case "on":
            case "DECIMAL":
            case "decimal":
            case "ASC":
            case "asc":
            case "DESC":
            case "desc":
                $RETURN .= " <span style=\"color:rgb(163,73,164)\">".$ITEM." </span>";
                break;
            case "VALUES":
            case "values":
            case "FROM":
            case "from":
            case "WHERE":
            case "where":
            case "LEFT":
            case "left":
            case "RIGHT":
            case "right":
            case "INSERT":
            case "insert":
            case "DELETE":
            case "delete":
            case "UPDATE":
            case "update":
                $RETURN .="<br><span style=\"color:rgb(163,73,164)\">".$ITEM." </span>";
                break;
            case "GROUP":
            case "group":
            case "INNER":
            case "inner":
            case "ORDER":
            case "order":
                $RETURN .=" <br><span style=\"color:rgb(163,73,164)\">".$ITEM." </span> ";
                break;
            case "JOIN":
            case "join":
            case "BY":
            case "by":
                $RETURN .="<span style=\"color:rgb(163,73,164)\">".$ITEM." </span>";
                break;
            case "AND";
            case "and";
                $RETURN .="<span style=\"color:rgb(163,73,164)\">".$ITEM." </span><br>";
                break;
            case "=":
                $RETURN .= " <span style=\"color:rgb(0,0,255)\">".$ITEM." </span>";
                break;
            case "BEGIN;":
                $RETURN .= "<span style=\"color:rgb(255,0,0)\">".$ITEM." </span><br>";
                break;
            case "COMMIT;":
                $RETURN .= "<br> <span style=\"color:rgb(255,0,0)\">".$ITEM." </span>";
                break;
            default:
                $RETURN .=$ITEM." ";
                break;
        }
    }
    $RETURN .= "<br><br><sup>El formateo puede tener errores de colores y salto de lineas.</sup></p>";
    echo $RETURN;
}

/*Hace las consultas a la base de datos
 * en caso de hacerse una consulta multiple devuelve los resultados
*/
function sqlQueryToDB($QUERY, $mode='SIMPLE_QUERY'){
    $DATA ="";

    $CONEXION = mysqli_connect($GLOBALS["CONS_HOST"], $GLOBALS["CONS_DBUSER"],
    $GLOBALS["CONS_DBPASS"], $GLOBALS["CONS_DBNAME"], $GLOBALS['CONS_PORT']) or die ("No se puede conectar al servidor sql");
    if(mysqli_connect_errno()){
        echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }else{
        if ($mode=='SIMPLE_QUERY') {
            $DATA = mysqli_query($CONEXION, $QUERY)or die("Error de mysql: ".mysql_error());
        }else if($mode=='MULTI_QUERY'){
            mysqli_multi_query($CONEXION, $QUERY)or die("Error de mysql: ".mysql_error());
            do {
                /* almacenar primer juego de resultados */
                if ($result = mysqli_store_result($CONEXION)) {
                    while ($row = mysqli_fetch_row($result)) {
                        $DATA = $row[0];
                    }
                    mysqli_free_result($result);
                }

            } while (mysqli_next_result($CONEXION));
        }
        mysqli_close($CONEXION);
    return $DATA;
    }
}
/**smachinesDropdown hace echo de una consulta MySql en un formato Dropdown de html.
@param $DATA es del tipo mysqli_result;
 */

function machinesCheckBox(){

    $QUERY = "SELECT maquina.`maquina_id`, maquina.`nombre` AS Maquina, maquina.`marca` AS Marca FROM maquina";
    $DATA = sqlQueryToDB($QUERY);

    $RESULT = "<table border='1'>";
    while($ROWS = sqlFetchArray($DATA, "NUM")){
        $RESULT .= "<tr><td>";
        $RESULT .= "<input type=\"checkbox\" name=\"macToAdd".$ROWS[0]."\" id=\"is_".$ROWS[0]."\"/>";
        $RESULT .= "   <label for=\"is_".$ROWS[0]."\">".$ROWS[1].$ROWS[2]."</label>";
        $RESULT .= "</td></tr>";
    }
    $RESULT .= "</table>";
    return $RESULT;
}
function machinesDropdown(){

    $QUERY = "SELECT maquina.`maquina_id`, maquina.`nombre` AS Maquina, maquina.`marca` AS Marca FROM maquina";
    $DATA = sqlQueryToDB($QUERY);

    $RESULT = " <select name=\"maquina\" id=\"machinesContainer\">";
    while($ROWS = sqlFetchArray($DATA, "NUM")){
        $RESULT .= "<option value=\"".$ROWS[0]."\" selected>".$ROWS[1]." | ".$ROWS[2]."</option>";
    }
    $RESULT .= "</select>";
    return $RESULT;
}

/**sellersDropdown hace echo de una consulta MySql en un formato Dropdown de html.
@param $DATA es del tipo mysqli_result;
 */
function sellersDropdown(){

    $QUERY = "SELECT `vendedor_id`,apellido, nombre FROM `vendedor` ORDER BY `vendedor`.`apellido` ASC";
    $DATA = sqlQueryToDB($QUERY);

    $RESULT = " <select name=\"sellers\" id=\"sellersContainer\">";
    while($ROWS = sqlFetchArray($DATA, "NUM")){
        $RESULT .= "<option value=\"".$ROWS[0]."\" selected>".$ROWS[1]." ".$ROWS[2]."</option>";
    }
    $RESULT .= "</select>";
    return $RESULT;
}

/**zonesDropdown hace echo de una consulta MySql en un formato Dropdown de html.
@param $DATA es del tipo mysqli_result;
 */
function zonesDropdown(){

    $QUERY = "SELECT zona_id, nombre FROM zona ORDER BY `zona`.`nombre` ASC";
    $DATA = sqlQueryToDB($QUERY);

    $RESULT = " <select name=\"zones\" id=\"zonesContainer\">";
    while($ROWS = sqlFetchArray($DATA, "NUM")){
        $RESULT .= "<option value=\"".$ROWS[0]."\" selected>".$ROWS[1]."</option>";
    }
    $RESULT .= "</select>";
    return $RESULT;
}


function zonesCheckbox(){

    $QUERY =  "SELECT * FROM `zona` ORDER BY `zona`.`nombre` ASC";
    $DATA = sqlQueryToDB($QUERY);

    $RESULT = "<table border='1'> <tr><td>Estan En</td><td>No Estan En</td></tr>";
    $RESULT_IS = "<td>";
    $RESULT_ISNOT = "<td>";

    /*Para una busqueda que devuelva entre otros datos $ROWS[0]= 1 $ROWS[1]="Asd" esto va a tener la forma:
     *$RESULT_IS .="<input type="checkbox" name="check1_is_1" id="is_1"/>";
     *$RESULT_IS .= "   <label for="is_1">ASD</label><br>";
     * $RESULT_ISNOT .= "<input type="checkbox" name="check_isNot_1" id="isNot_1"/>";
     * $RESULT_ISNOT .= "   <label for="isNot_1">ASD</label><br>";
     * */
    while($ROWS = sqlFetchArray($DATA, "NUM")){
        $RESULT_IS .= "<input type=\"checkbox\" name=\"check_is_".$ROWS[0]."\" id=\"is_".$ROWS[0]."\"/>";
        $RESULT_IS .= "   <label for=\"is_".$ROWS[0]."\">".$ROWS[1]."</label><br>";
        $RESULT_ISNOT .= "<input type=\"checkbox\" name=\"check_isNot_".$ROWS[0]."\" id=\"isNot_".$ROWS[0]."\"/>";
        $RESULT_ISNOT .= "   <label for=\"isNot_".$ROWS[0]."\">".$ROWS[1]."</label><br>";
    }
    $RESULT_IS .= "</td>";
    $RESULT_ISNOT .= "</td>";
    $RESULT .= $RESULT_IS . $RESULT_ISNOT;
    $RESULT .= "</tr></table>";
    return $RESULT;
}

/* Pasa a la siguiente fila de $TARGET.*/
function sqlFetchArray($TARGET, $MODE){
    $SQLMODE ="";
    if ($GLOBALS["CONS_DB_TYPE"] = "mysql") {
        if($MODE=="NUM"){
            $SQLMODE = MYSQLI_NUM;
        }elseif($MODE=="ASSOC"){
            $SQLMODE = MYSQLI_ASSOC;
        }
        $RESULT =mysqli_fetch_array($TARGET, $SQLMODE);
    } elseif ($GLOBALS["CONS_DB_TYPE"] = "mysql") {
        if($MODE == "NUM"){
            $SQLMODE = SQLITE3_NUM;
        }elseif($MODE=="ASSOC"){
            $SQLMODE = SQLITE_ASSOC;
        }
        $RESULT = sqlite_fetch_array($TARGET, $SQLMODE);
    } else {
        echo "CONS_DB_TYPE no fue seleccionado. Modificar ./Constants.php";
        $RESULT = "No DB selected.";
    }
    return $RESULT;
}

function sqlColumNames($DATA){
    $RESULT =  " <tr>";
    if($GLOBALS['CONS_DB_TYPE']=="mysql"){
        $COLUMN_NAME = mysqli_fetch_fields($DATA);
        foreach($COLUMN_NAME as $TITLE){
            $RESULT .= "<td BGCOLOR=\"#C0C0C0\" style=\"min-width:20px\">".$TITLE->name ." </td>";
        }
    }elseif($GLOBALS['CONS_DB_TYPE']=="sqlite"){/*TODO Test*/
        $FIELDCOUNT = sqlite_num_fields($DATA);
        for($i=0;$i <= $FIELDCOUNT; $i+=1 ){
           $RESULT .= "<td BGCOLOR=\"#C0C0C0\" style=\"min-width:20px\">". sqlite_field_name($DATA, 1)."</td>";
        }
    }
    $RESULT .=  "</tr>";
    return $RESULT;
}

function debbug_arrayPrintValues($ARRAY){
    echo "<pre>", print_r($ARRAY, true), "</pre>";
}

function writesqlQueryToDB($QUERY){
    $RESULT = " TRANSACTION; ".$QUERY."; COMMIT;";
    if ($GLOBALS["CONS_DB_TYPE"] == "mysql") {
        $RESULT = "START".$RESULT;
    }elseif ($GLOBALS["CONS_DB_TYPE"] ==  "sqlite") {/*TODO ver que esto funcione*/
        $RESULT = "BEGIN".$RESULT;
    } else {
        $RESULT="ERROR: CONS_DB_TYPE no fue seleccionado. Modificar ./Constants.php";
    }

    /*Esta consulta no devuelve una tabla, asi que se usa el return para devolver como
    * se efectuo la consulta de manera atomica segun la base de datos
    */
    return $RESULT;
}

function nextID($TABLE){

    if ($GLOBALS["CONS_DB_TYPE"] == "mysql") {
        $RESULT = "SELECT Auto_increment INTO @newID FROM information_schema.tables WHERE table_name='".$TABLE."';";
    }elseif ($GLOBALS["CONS_DB_TYPE"] ==  "sqlite") {/*TODO ver que esto funcione*/
        /*$RESULT = "SELECT set_var(newID, *) FROM SQLITE_SEQUENCE WHERE name='".$TABLE."';";*//*TODO ARMAR BIEN*/
    } else {
        $RESULT="ERROR: CONS_DB_TYPE no fue seleccionado. Modificar ./Constants.php";
    }
    return $RESULT;
}
?>
